package code15.io;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TestByteArray {
	public static void main(String[] args) {
		//f1();
		
		//f2();
		
		t1();
		System.out.println("over");
	}

	private static void t1() {
		// 将文件中英文字母全部转换为大写。
		String words = null;
		try (
				FileInputStream fis = new FileInputStream("src/code15/io/a.txt");
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				) {
			byte[] buffer = new byte[1024];
			int len = -1;
			while ( (len = fis.read(buffer)) != -1) {
				// 操作读取到的内容
				baos.write(buffer, 0, len);
			}
			// 获取文件的所有字节
			byte[] byteArray = baos.toByteArray();
			// 把 文件内容中英文字母全部转换为大写。
			words = new String(byteArray).toUpperCase();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// 等上面的读取操作结束后, 再重新写入内容
		try (
				FileOutputStream fos = new FileOutputStream("src/code15/io/a.txt");
				) {
			// 写入到文件中
			fos.write(words.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void f2() {
		try (
				// 把内容写出到 内部的字节数组中
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				) {
			baos.write('c');// 不能写中文
			baos.write("hello".getBytes());
			
			baos.flush();
			
			// 获取 当前流中保存的 所有字节
			byte[] byteArray = baos.toByteArray();
			System.out.println("byteArray:" + new String(byteArray));
			
			// 把 字节数组输出流中保存的 字节全部写入到 其他的字节输出流中
			// 此处的效果是, 会把 字节数组输出流中内容保存到指定文件中
			baos.writeTo(new FileOutputStream("src/code15/io/xyz.txt"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void f1() {
		byte[] data = "hello world".getBytes();
		try (
				// 把 字节数组交给 字节数组输入流进行操作
				// 操作的不是外部资源, 是内存中的数据, 不需要 释放资源
				InputStream is = new ByteArrayInputStream(data);
				) {
			int d = 0;
			while ( (d = is.read()) != -1 ) {
				System.out.print((char) d );
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
